#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>

//在 Qt 中，浮动窗口也称之为铆接部件。浮动窗口是通过 QDockWidget类 来实现浮动的功能。
//浮动窗口一般是位于核心部件的周围，可以有多个

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //给主窗口添加两个子窗口
    QDockWidget* dockWidget1 = new QDockWidget(this);
    QDockWidget* dockWidget2 = new QDockWidget(this);
    //浮动窗口也是可以设置标题的
    dockWidget1->setWindowTitle("浮动窗口1");
    dockWidget2->setWindowTitle("浮动窗口2");
    //使用addDockWidget方法,把浮动窗口加入到主窗口中
    this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget1);
    this->addDockWidget(Qt::TopDockWidgetArea, dockWidget2);

    //给浮动窗口内部,添加一些其他的控件
    //不能直接给这个浮动窗口添加子控件,而是需要创建出一个单独的QWidget,把要添加的控件加入到 QWidget 中
    //然后再把这个QWidget设置到dockWidget中
    //由于dockWidget中只能包含一个QWidget要想添加更多的控件就只能往QWidget中进行添加,多套一层
    QWidget* container = new QWidget(dockWidget1);
    dockWidget1->setWidget(container);

    //创建布局管理器,把布局管理器设置到QWidget中
    QVBoxLayout* layout = new QVBoxLayout(container);
    container->setLayout(layout);

    //创建其它控件添加到layout中
    QLabel* label = new QLabel("这是一个QLabel", container);
    QPushButton* pushButton = new QPushButton("这是按钮", container);
    layout->addWidget(label);
    layout->addWidget(pushButton);

    //设置浮动窗口允许停靠的位置
    dockWidget1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

}

MainWindow::~MainWindow()
{
    delete ui;
}

